# 682. 棒球比赛
# 你现在是棒球比赛记录员。
# 给定一个字符串列表，每个字符串可以是以下四种类型之一：
# 1.整数（一轮的得分）：直接表示您在本轮中获得的积分数。
# 2. "+"（一轮的得分）：表示本轮获得的得分是前两轮有效 回合得分的总和。
# 3. "D"（一轮的得分）：表示本轮获得的得分是前一轮有效 回合得分的两倍。
# 4. "C"（一个操作，这不是一个回合的分数）：表示您获得的最后一个有效 回合的分数是无效的，应该被移除。
#
# 每一轮的操作都是永久性的，可能会对前一轮和后一轮产生影响。
# 你需要返回你在所有回合中得分的总和
#
# 来源：力扣（LeetCode）
# 链接：https://leetcode-cn.com/problems/baseball-game
# 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

print()

'''
棒球计分
设立一个score数组，保存有效得分，
“C” 操作删掉最后一个有效值
“+” 相加最后2个有效值 ，他们的和加到 lis中去
“D” 翻倍最后的有效值，加入到lis中
'''

from typing import  List
class Solution:
    def calPoints(self, ops: List[str]) -> int:
        lastYouXiao = 0
        scoreLis = []
        for ii in ops:
            if ii == "D":
                score = scoreLis[-1]
                newScore = score*2
                scoreLis.append(newScore)
            elif ii == "+":
                num1 = scoreLis[-1]
                num2 = scoreLis[-2]
                newScore = num1 + num2
                scoreLis.append(newScore)
            elif ii == "C":
                scoreLis.pop()
            else:
                scoreLis.append(int(ii))

        return sum(scoreLis)

''''
class Solution:
    def calPoints(self, ops: List[str]) -> int:
        stack = []
        for i in ops:
            if i == '+':
                stack.append(stack[-1] + stack[-2])
            elif i == 'D':
                stack.append(stack[-1] * 2)
            elif i == 'C':
                stack.pop()
            else:
                stack.append(int(i))
        return sum(stack)
'''






